// https://www.nowcoder.com/practice/99eb8040d116414ea3296467ce81cbbc?tpId=230&tqId=2023819&ru=/exam/oj&qru=/ta/dynamic-programming/question-ranking&sourceUrl=/exam/oj?page=1&tab=%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587&topicId=196

// 算法思路总结：
// 1. 二维前缀和快速求解子矩阵和查询
// 2. 预处理：dp[i][j]表示以(1,1)到(i,j)为顶点的矩阵和
// 3. 递推公式：dp[i][j] = 上+左-左上+当前值
// 4. 子矩阵和：(x1,y1)到(x2,y2) = dp[x2][y2] - dp[x2][y1-1] - dp[x1-1][y2] + dp[x1-1][y1-1]
// 5. 预处理：O(n×m)，查询：O(1)，空间：O(n×m)

#include <iostream>
using namespace std;

const int N = 1010;
int arr[N][N];
long long dp[N][N];

int main() 
{
    int n, m, q;
    cin >> n >> m >> q;

    for (int i = 1 ; i <= n ; i++)
    {
        for (int j = 1 ; j <= m ; j++)
        {
            cin >> arr[i][j];
            dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + arr[i][j];
        }
    }

    for (int i = 0 ; i < q ; i++)
    {
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        cout << dp[x2][y2] - dp[x2][y1 - 1] - dp[x1 - 1][y2] + dp[x1 - 1][y1 - 1] << endl;
    }

    return 0;
}